package br.ucb.cesbdao.utilBeans;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import br.ucb.cesbdao.beans.Atendimento;
import br.ucb.cesbdao.beans.Frequencia;
import br.ucb.cesbdao.beans.Grupo;
import br.ucb.cesbdao.beans.Pessoa;
import br.ucb.cesbdao.beans.Trabalhador;
import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.janelas.Janela;
import br.ucb.cesbdao.janelas.JanelaRelatorio;
import br.ucb.cesbdao.model.AtendimentoModel;
import br.ucb.cesbdao.model.FrequenciaModel;
import br.ucb.cesbdao.model.TipoAtendimentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TipoEncaminhamentoDoAtendimentoModel;
import br.ucb.cesbdao.model.TrabalhadorModel;
import br.ucb.cesbdao.model.TrabalhadorPorGrupoModel;
import br.ucb.cesbdao.model.impl.AtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.FrequenciaModelImpl;
import br.ucb.cesbdao.model.impl.TipoAtendimentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoEncaminhamentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.model.impl.TrabalhadorModelImpl;
import br.ucb.cesbdao.model.impl.TrabalhadorPorGrupoModelImpl;
import br.ucb.cesbdao.relatoriosDTO.AtendimentoAnoDTO;
import br.ucb.cesbdao.relatoriosDTO.AtendimentoDTO;
import br.ucb.cesbdao.relatoriosDTO.AtendimentoDetalheDTO;
import br.ucb.cesbdao.relatoriosDTO.EncaminhamentoDTO;
import br.ucb.cesbdao.relatoriosDTO.EncaminhamentoRl;
import br.ucb.cesbdao.relatoriosDTO.FrequenciaGrupoDTO;
import br.ucb.cesbdao.relatoriosDTO.TipoAtendeDTO;
import br.ucb.cesbdao.relatoriosDTO.TipoAtendedimentoDTO;
import br.ucb.cesbdao.relatoriosDTO.TrabalhadorDTO;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.visao.Visao;

public class RelatoriosUtil {
	public static void quantidadeDeAtendimentos(String data) {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(data.isEmpty())
			return;
		ArrayList<Atendimento> atendimentos = new ArrayList<Atendimento>();
		LinkedHashMap<String, AtendimentoDTO> atendimentoTOs = new LinkedHashMap<String, AtendimentoDTO>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 3946757449288423308L;

			@Override
			public AtendimentoDTO get(Object key) {
				if (!containsKey(key)){
					put((String) key, new AtendimentoDTO(0, (String) key));
				}
				return super.get(key);
			}
		};
		atendimentoTOs.get("jan");
		atendimentoTOs.get("fev");
		atendimentoTOs.get("mar");
		atendimentoTOs.get("abr");
		atendimentoTOs.get("mai");
		atendimentoTOs.get("jun");
		atendimentoTOs.get("jul");
		atendimentoTOs.get("ago");
		atendimentoTOs.get("set");
		atendimentoTOs.get("out");
		atendimentoTOs.get("nov");
		atendimentoTOs.get("dez");
		if(DateUtil.isAnoValido(data)){
			atendimentos = model.getByAno(Integer.parseInt(data));
			if(atendimentos.isEmpty()){
				Visao.showMessage(EnumMensagens.MSG_ERRO_NO_ATD_P.getMensagem(),"aviso");
				return;
			}
			DecimalFormat dc = new DecimalFormat("00");
			for(int i = 1; i <= 12; i ++){
				for (Atendimento atendimento : atendimentos) {
					switch (i) {
					case 1:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("jan").sum(1);
						break;
					case 2:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("fev").sum(1);
						break;
					case 3:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("mar").sum(1);
						break;
					case 4:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("abr").sum(1);
						break;
					case 5:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("mai").sum(1);
						break;
					case 6:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("jun").sum(1);
						break;
					case 7:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("jul").sum(1);
						break;
					case 8:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("ago").sum(1);
						break;
					case 9:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("set").sum(1);
						break;
					case 10:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("out").sum(1);
						break;
					case 11:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("nov").sum(1);
						break;
					case 12:
						if(atendimento.getData().contains(data+"-"+dc.format(i)))
							atendimentoTOs.get("dez").sum(1);
						break;
					}

				}
			}
			JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
			ArrayList<AtendimentoDTO> tos = new ArrayList<AtendimentoDTO>(atendimentoTOs.values());
			//Collections.sort(tos, EnumOrdenaAtendimentoDTO.BYMES);
			janelaRelatorio.showRelatorioQuantAtendimento(tos,data);
			janelaRelatorio.setVisible(true);


		}

	}
	public static void quantidadeDeAtendimentos(Date dataInicio, Date dataFim) {
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<Atendimento> atendimentos = new ArrayList<Atendimento>();
		boolean flag = true;
		LinkedHashMap<String, ArrayList<AtendimentoDTO>> atendimentoTOsD = new LinkedHashMap<String,ArrayList<AtendimentoDTO>>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			public ArrayList<AtendimentoDTO> get(Object key) {
				if (!containsKey(key)){
					put((String)key, new ArrayList<AtendimentoDTO>());
				}
				return super.get(key);
			}
		};

		LinkedHashMap<String, AtendimentoDTO> atendimentoTOs = new LinkedHashMap<String, AtendimentoDTO>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			@Override
			public AtendimentoDTO get(Object key) {
				if (!containsKey(key)){
					put((String) key, new AtendimentoDTO(0, (String) key));
				}
				return super.get(key);
			}
		};

		AtendimentoModel model = new AtendimentoModelImpl();
		atendimentos = model.getByPeriodo(dataInicio,dataFim);
		if(atendimentos.isEmpty()){
			Visao.showMessage(EnumMensagens.MSG_ERRO_NO_ATD_P.getMensagem(),"aviso");
			return;
		}
		DecimalFormat dc = new DecimalFormat("00");
		for(int i = DateUtil.getAno(dataInicio);i <= DateUtil.getAno(dataFim);i++){

			atendimentoTOs.clear();
			if(!Janela.getTipoDeRelatorio().equalsIgnoreCase("G")){
				atendimentoTOs.get("jan");
				atendimentoTOs.get("fev");
				atendimentoTOs.get("mar");
				atendimentoTOs.get("abr");
				atendimentoTOs.get("mai");
				atendimentoTOs.get("jun");
				atendimentoTOs.get("jul");
				atendimentoTOs.get("ago");
				atendimentoTOs.get("set");
				atendimentoTOs.get("out");
				atendimentoTOs.get("nov");
				atendimentoTOs.get("dez");
			}
			for(int cont = 1; cont <= 12; cont ++){
				for (Atendimento atendimento : atendimentos) {
					switch (cont) {
					case 1:

						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jan").sum(1);
						break;
					case 2:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("fev").sum(1);
						break;
					case 3:
						if(DateUtil.isDataIgualMesAno(i+"-"+dc.format(cont),atendimento.getData()))	{
							atendimentoTOs.get("mar").sum(1);
						}
						break;
					case 4:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("abr").sum(1);
						break;
					case 5:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("mai").sum(1);
						break;
					case 6:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jun").sum(1);
						break;
					case 7:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jul").sum(1);
						break;
					case 8:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("ago").sum(1);
						break;
					case 9:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("set").sum(1);
						break;
					case 10:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("out").sum(1);
						break;
					case 11:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("nov").sum(1);
						break;
					case 12:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("dez").sum(1);
						break;
					}
				}
			}

			flag = false;
			if(Janela.getTipoDeRelatorio().equalsIgnoreCase("G")){
				Set<Entry<String, AtendimentoDTO>> set = atendimentoTOs.entrySet();
				for (Entry<String, AtendimentoDTO> entry : set) {
					if(entry.getValue().getQuant() != 0){
						flag = true;
						break;
					}
				}
			}else
				atendimentoTOsD.put(String.valueOf(i),new ArrayList<AtendimentoDTO>(atendimentoTOs.values()));
			if(flag)
				atendimentoTOsD.put(String.valueOf(i),new ArrayList<AtendimentoDTO>(atendimentoTOs.values()));
		}
		ArrayList<AtendimentoAnoDTO> atendimentosPeriodo = new ArrayList<AtendimentoAnoDTO>();
		Set<Entry<String, ArrayList<AtendimentoDTO>>> set = atendimentoTOsD.entrySet();
		for (Entry<String, ArrayList<AtendimentoDTO>> entry : set) {
			atendimentosPeriodo.add(new AtendimentoAnoDTO(entry.getKey(),entry.getValue()));
		}
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		parametros.put("Total",atendimentos.size());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantAtendimento(atendimentosPeriodo,parametros);
		janelaRelatorio.setVisible(true);

	}
	public static void quantidadeDeAtendimentosByAFI(Date dateIni, Date dateFim,
			Trabalhador atendenteAt) {
		if(DateUtil.isPeriodoValido(dateIni,dateFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}

		ArrayList<Atendimento> atendimentos = new ArrayList<Atendimento>();
		LinkedHashMap<String, ArrayList<AtendimentoDTO>> atendimentoTOsD = new LinkedHashMap<String,ArrayList<AtendimentoDTO>>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			public ArrayList<AtendimentoDTO> get(Object key) {
				if (!containsKey(key)){
					put((String)key, new ArrayList<AtendimentoDTO>());
				}
				return super.get(key);
			}
		};
		LinkedHashMap<String, AtendimentoDTO> atendimentoTOs = new LinkedHashMap<String, AtendimentoDTO>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			@Override
			public AtendimentoDTO get(Object key) {
				if (!containsKey(key)){
					put((String) key, new AtendimentoDTO(0, (String) key));
				}
				return super.get(key);
			}
		};
		AtendimentoModel model = new AtendimentoModelImpl();
		atendimentos = model.getByPeriodoAndAFI(dateIni,dateFim,atendenteAt.getCpf());
		if(atendimentos.isEmpty()){
			Visao.showMessage(EnumMensagens.MSG_ERRO_NO_ATD_P.getMensagem(),"aviso");
			return;
		}
		DecimalFormat dc = new DecimalFormat("00");


		for(int i = DateUtil.getAno(dateFim);i <= DateUtil.getAno(dateFim);i++){



			atendimentoTOs.get("jan");
			atendimentoTOs.get("fev");
			atendimentoTOs.get("mar");
			atendimentoTOs.get("abr");
			atendimentoTOs.get("mai");
			atendimentoTOs.get("jun");
			atendimentoTOs.get("jul");
			atendimentoTOs.get("ago");
			atendimentoTOs.get("set");
			atendimentoTOs.get("out");
			atendimentoTOs.get("nov");
			atendimentoTOs.get("dez");

			for(int cont = 1; cont <= 12; cont ++){
				for (Atendimento atendimento : atendimentos) {
					switch (cont) {
					case 1:

						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jan").sum(1);
						break;
					case 2:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("fev").sum(1);
						break;
					case 3:
						if(DateUtil.isDataIgualMesAno(i+"-"+dc.format(cont),atendimento.getData()))	{
							atendimentoTOs.get("mar").sum(1);
						}
						break;
					case 4:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("abr").sum(1);
						break;
					case 5:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("mai").sum(1);
						break;
					case 6:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jun").sum(1);
						break;
					case 7:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("jul").sum(1);
						break;
					case 8:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("ago").sum(1);
						break;
					case 9:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("set").sum(1);
						break;
					case 10:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("out").sum(1);
						break;
					case 11:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("nov").sum(1);
						break;
					case 12:
						if(atendimento.getData().contains(i+"-"+dc.format(cont)))
							atendimentoTOs.get("dez").sum(1);
						break;
					}
				}
			}
			atendimentoTOsD.put(String.valueOf(i),new ArrayList<AtendimentoDTO>(atendimentoTOs.values()));
		}
		ArrayList<AtendimentoAnoDTO> atendimentosPeriodo = new ArrayList<AtendimentoAnoDTO>();
		Set<Entry<String, ArrayList<AtendimentoDTO>>> set = atendimentoTOsD.entrySet();
		for (Entry<String, ArrayList<AtendimentoDTO>> entry : set) {
			atendimentosPeriodo.add(new AtendimentoAnoDTO(entry.getKey(),entry.getValue()));
		}
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dateIni));
		parametros.put("dataFim", DateUtil.formataData(dateFim));
		parametros.put("total", atendimentos.size());
		TrabalhadorModel modelTrab = new TrabalhadorModelImpl();
		parametros.put("nomeAFI",modelTrab.consultaTrabalhadorByCpf(atendenteAt.getCpf()).getNome());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantAtendimentoAFI(atendimentosPeriodo,parametros);
		janelaRelatorio.setVisible(true);

	}
	public static void quantidadeDeFaltasByAFI(Date dateIni, Date dateFim, Trabalhador atendenteAt) {
		FrequenciaModel model = new FrequenciaModelImpl();
		if(DateUtil.isPeriodoValido(dateIni,dateFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<Frequencia> frequencias = new ArrayList<Frequencia>();

		frequencias = model.getFrequenciabyIdPessoaPeriodo(atendenteAt.getId(),dateIni,dateFim);
		if(frequencias.isEmpty()){
			Visao.showMessage(EnumMensagens.MSG_ERRO_NO_REGISTRO.getMensagem(),"aviso");
			return;
		}

		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dateIni));
		parametros.put("dataFim", DateUtil.formataData(dateFim));
		parametros.put("nomeAFI", atendenteAt.getNome());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantidadeFreqAFI(frequencias,parametros);
		janelaRelatorio.setVisible(true);


	}

	public static void quantidadeDeAtendimentosGrupo(Date dataInicio, Date dataFim,Grupo grupo) {
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<Trabalhador> atendentes = new ArrayList<Trabalhador>();
		ArrayList<TrabalhadorDTO> atendenteTOs = new ArrayList<TrabalhadorDTO>();
		LinkedHashMap<Trabalhador,TrabalhadorDTO> atendentesTOL = new LinkedHashMap<Trabalhador, TrabalhadorDTO>(){
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;
			@Override
			public TrabalhadorDTO get(Object key) {
				if (!containsKey(key)){
					put((Trabalhador) key, new TrabalhadorDTO((Trabalhador) key,0));
				}
				return super.get(key);
			}
		};
		TrabalhadorPorGrupoModel modelTrab = new TrabalhadorPorGrupoModelImpl();
		AtendimentoModel modelAtend = new AtendimentoModelImpl();
		atendentes = modelTrab.consultaTrabalhadorGrupoByGrupo(grupo.getIdGrupo());
		atendenteTOs = modelAtend.getByPeriodoAndGrupo(dataInicio, dataFim, grupo);
		for (Trabalhador  atendente : atendentes) {
			atendentesTOL.get(atendente);
			for (TrabalhadorDTO atendenteTO : atendenteTOs) {
				if(atendente.getId() == atendenteTO.getTrabalhador().getId())
					atendentesTOL.put(atendente,atendenteTO);
			}
		}
		atendenteTOs.removeAll(atendenteTOs);
		Set<Entry<Trabalhador, TrabalhadorDTO>> set = atendentesTOL.entrySet();		
		for (Entry<Trabalhador, TrabalhadorDTO> entry : set) {
			atendenteTOs.add(entry.getValue());
		}
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		parametros.put("nomeGrupo",grupo.getNome());
		parametros.put("numeroGrupo",grupo.getNumeroGrupo());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantidadeAtndGrupo(atendenteTOs,parametros);
		janelaRelatorio.setVisible(true);
	}

	public static void quantidadeDeFaltasByGrupo(Date dataInicio, Date dataFim,Grupo grupo){
		FrequenciaModel model = new FrequenciaModelImpl();
		LinkedHashMap<String,ArrayList<String>> frequenciaGrupoTOs = new LinkedHashMap<String, ArrayList<String>>();
		ArrayList<Frequencia> frequencias = new ArrayList<Frequencia>();
		frequencias = model.getFrequenciabyGrupo(grupo.getIdGrupo(),dataInicio,dataFim);

		for(Frequencia frequencia : frequencias){
			ArrayList<String> afis = new ArrayList<String>();
			for(Frequencia frequencia1 : frequencias){
				if(frequencia.getData().equalsIgnoreCase(frequencia1.getData())){
					afis.add(frequencia1.getPessoa().getNome());
				}
			}
			frequenciaGrupoTOs.put(frequencia.getData(),afis);
		}

		Set<Entry<String, ArrayList<String>>> set = frequenciaGrupoTOs.entrySet();
		ArrayList<FrequenciaGrupoDTO> frequenciaGrupoTO = new ArrayList<FrequenciaGrupoDTO>();
		for (Entry<String, ArrayList<String>> entry : set) {
			frequenciaGrupoTO.add(new FrequenciaGrupoDTO(entry.getKey(),entry.getValue()));
		}
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		parametros.put("nomeGrupo",grupo.getNome());
		parametros.put("numeroGrupo",grupo.getNumeroGrupo());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantidadeFaltasGrupo(frequenciaGrupoTO,parametros);
		janelaRelatorio.setVisible(true);
	}

	public static void quantidadeDeEncaminhamento(Date dataInicio, Date dataFim) {
		TipoEncaminhamentoDoAtendimentoModel model = new TipoEncaminhamentoDoAtendimentoModelImpl();
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<EncaminhamentoRl> encaminhamentoRls = new ArrayList<EncaminhamentoRl>();
		ArrayList<EncaminhamentoDTO> encaminhamentoDTO = new ArrayList<EncaminhamentoDTO>();

		encaminhamentoRls = model.getByPeriodo(dataInicio, dataFim);
		if(encaminhamentoRls.isEmpty()){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_NO_ENCAMINHAMENTO.getMensagem(), "Aviso");
			return;
		}


		encaminhamentoDTO = EncaminhamentoUtil.pegaDTO(encaminhamentoRls);

		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioEncaminhamento(encaminhamentoDTO,parametros);
		janelaRelatorio.setVisible(true);
	}
	public static void quantidadeDeTpAtendimentos(Date dataInicio, Date dataFim) {
		TipoAtendimentoDoAtendimentoModel model = new TipoAtendimentoDoAtendimentoModelImpl();
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<TipoAtendeDTO> tipoAtendimentoRls = new ArrayList<TipoAtendeDTO>();
		ArrayList<TipoAtendedimentoDTO> tipoAtendimentoDTO = new ArrayList<TipoAtendedimentoDTO>();

		tipoAtendimentoRls = model.getByPeriodo(dataInicio, dataFim);
		if(tipoAtendimentoRls.isEmpty()){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_NO_ENCAMINHAMENTO.getMensagem(), "Aviso");
			return;
		}


		tipoAtendimentoDTO = TipoAtendimentoUtil.pegaDTO(tipoAtendimentoRls);

		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioTipoAtende(tipoAtendimentoDTO,parametros);
		janelaRelatorio.setVisible(true);
		
	}
	public static void quantidadeDeAtendimentosAtendidos(Date dataInicio, Date dataFim,Pessoa pessoa) {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<AtendimentoDetalheDTO> atendidoAtendDTOs = new ArrayList<AtendimentoDetalheDTO>();
		atendidoAtendDTOs = model.getByPeriodoAndAtendido(dataInicio,dataFim,pessoa.getId());
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		parametros.put("nomeAtendido", pessoa.getNome());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantAtendimentoAtendido(atendidoAtendDTOs,parametros);
		janelaRelatorio.setVisible(true);
		
	}
	public static void detalhaAtendimento(Date dataInicio, Date dataFim) {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<AtendimentoDetalheDTO> atendimentoDTOs = new ArrayList<AtendimentoDetalheDTO>();
		atendimentoDTOs = model.getByPeriodoDetalhe(dataInicio,dataFim);
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioAtendimentoDetalhe(atendimentoDTOs,parametros);
		janelaRelatorio.setVisible(true);
	}
	public static void quantidadeDeAtendimentosAtendidosByAFI(Date dataInicio,Date dataFim, Pessoa pessoa, Trabalhador atendente) {
		AtendimentoModel model = new AtendimentoModelImpl();
		if(DateUtil.isPeriodoValido(dataInicio,dataFim)){
			Visao.showMessageWarning(EnumMensagens.MSG_ERRO_DATA_INVALIDA.getMensagem(), "Aviso");
			return;
		}
		ArrayList<AtendimentoDetalheDTO> atendidoAtendDTOs = new ArrayList<AtendimentoDetalheDTO>();
		atendidoAtendDTOs = model.getByPeriodoAndAtendidoByAFI(dataInicio,dataFim,pessoa.getId(),atendente);
		Map<String,Object> parametros = new HashMap<String, Object>();
		parametros.put("dataInicio",DateUtil.formataData(dataInicio));
		parametros.put("dataFim", DateUtil.formataData(dataFim));
		parametros.put("nomeAtendido", pessoa.getNome());
		JanelaRelatorio janelaRelatorio = new JanelaRelatorio();
		janelaRelatorio.showRelatorioQuantAtendimentoAtendido(atendidoAtendDTOs,parametros);
		janelaRelatorio.setVisible(true);
		
	}
	

}